#include "key.h"
#include "SysTick.h"

/***************************
* 函数名： KEY_Init
* 功能：按键初始化函数
* 输入：无
* 输出：无
*/
void KEY_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	__HAL_RCC_GPIOA_CLK_ENABLE();	// 开启GPIOA时钟
	__HAL_RCC_GPIOE_CLK_ENABLE();	// 开启GPIOE时钟
	
	GPIO_InitStructure.Pin = KEY0_PIN | KEY1_PIN | KEY2_PIN;	// PB5
	GPIO_InitStructure.Mode = GPIO_MODE_INPUT;	// 输入模式
	GPIO_InitStructure.Pull = GPIO_PULLUP;					// 上拉
	HAL_GPIO_Init(KEY_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin = KEY_UP_PIN;						// KEY_UP
	GPIO_InitStructure.Pull = GPIO_PULLDOWN;				// 下拉
	HAL_GPIO_Init(KEY_UP_PORT, &GPIO_InitStructure);
}

/********************
* 函数功能：按键扫描检测
* 输入：mode=0：单次按下按键
				mode=1：连接按下按键
* 输出：0：未有按键按下
			KEY_UP_PRESS: KEY_UP按下
			KEY0_PRESS：KEY0按下
			KEY1_PRESS：KEY1按下
			KEY2_PRESS：KEY2按下
KEY_UP 按下高电平，KEY0，KEY1，KEY2按下低电平
*******************/
u8 KEY_Scan(u8 mode)
{
	static u8 key = 1;
	if(mode == 1) key = 1; // 连续按下
	if(key==1 && (KEY_UP ==1||KEY0 == 0||KEY1 == 0|| KEY2 == 0)) // 任意按键按下
	{
		delay_ms(10); // 消抖
		key = 0;
		if(KEY_UP == 1) return KEY_UP_PRESS;
		if(KEY0 == 0) return KEY0_PRESS;
		if(KEY1 == 0) return KEY1_PRESS;
		if(KEY2 == 0) return KEY2_PRESS;
	}
	else if(KEY_UP == 0 && KEY0 == 1 && KEY1 == 1 && KEY2 == 1) // 无按键按下
	{
		key = 1;
	}
	return 0;
}